Grundkurs SQL

2.4.2  Erweiterte Form des INNER JOIN

INNER JOIN über drei und mehr Tabellen

Einen kleinen Überblick über die Beziehungen und Verbundmöglichkeiten zwischen Tabellen können Sie mit dem Hilfe-Link aufrufen: Hilfe öffnen!

Bevor aber das Gefühl aufkommt, alles verstanden zu haben, bleibt uns noch das Verbinden mehrerer Tabellen. Doch auch das ist keine unlösbare Aufgabe. SQL verwendet dafür eine bestimmte Schreibweise. Wer diese lernt und beherrscht, sollte keine Probleme haben.
Die einzelnen Verknüpfungen mit den verschiedenen Tabellen werden geschachtelt und durch Klammern getrennt. Dabei beginnt eine Klammer vor jeder neuen Tabelle. Das Schlüsselwort JOIN folgt auf den Tabellennamen.

Für unser Beispiel der Verbindung von Abteilung mit Mitarbeitern und Titel ergibt das folgende Form:

[18]SELECT tbl_titel.titel, name, abteilungsname, abteilung_aufgabengebiet
FROM   tbl_abteilung
       INNER JOIN
       (
         tbl_mitarbeiter INNER JOIN tbl_titel
         ON tbl_mitarbeiter.titel_ID = tbl_titel.titel_ID
       )
       ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_id

Abfrage ausführen 

Das Ergebnis sollte das gleiche sein wie mit der entsprechenden WHERE-Anweisung. Auch diese Abfrage können Sie umstellen. Vermeiden Sie aber Schreibfehler, da SQL sonst mit Fehlermeldungen reagiert.

Zum Schluss wollen wir unsere Ergebnisse einschränken und zwar mit den gleichen Bedingungen wie schon zuvor. Die Regel ist, dass die WHERE-Anweisung an das Ende der Abfrage gesetzt wird. Das sollte uns nun keine Schwierigkeiten mehr machen. Daher wird uns hier ein Beispiel reichen. Die anderen können Sie selbst nachvollziehen.

Wir wollen alle Mitarbeiter aus der Abteilung Einkauf anzuzeigen lassen:

[2]SELECT tbl_titel.titel, name, abteilungsname, abteilung_aufgabengebiet
FROM   tbl_abteilung
       INNER JOIN
       (
         tbl_mitarbeiter INNER JOIN tbl_titel
         ON tbl_mitarbeiter.titel_ID = tbl_titel.titel_ID
       )
       ON tbl_abteilung.abteilung_ID = tbl_mitarbeiter.abteilung_id
WHERE  tbl_abteilung.abteilungsname = "Einkauf"

Bemerkung:
Spätestens an dieser Stelle sei darauf hingewiesen, dass die bislang verwendete Regel nach der in einem Verbund stets zuerst die Mastertabelle anzugeben ist, nur didaktischer Natur war. Der innere Verbund ist kommutativ, die Reihenfolge der Tabellen also beliebig!